﻿#include<math.h>

#include<stdio.h>

int main()
{
	for (int i = 2; i < 1000; ++i)
	{
		int sum = 0;//sum要放在这里面，因为判断i是否为完数，i都要从0开始
		//1.将因子都加进sum中
		for (int j = 1; j <= i/2; ++j)
		{
			if (i % j == 0)
			{
				sum += j;
			}
		}

		if (i == sum)
		{
			printf("%d=", i);
			printf("1");
			for (int j = 2; j <= i/2; ++j)
			{
				if (i % j == 0)
				{
					printf("+%d", j);
				}
			}
			printf("\n");
		}
	}
	printf("\n");
	return 0;
}

//#define M 3
//#define N 3
//
//int main()
//{
//	int m = 0, n = 0;
//
//	scanf("%d %d", &m, &n);
//
//	int arr1[M][N];
//
//	int arr2[M][N];
//
//	for (int i = 0; i<m; ++i)
//	{
//		for (int j = 0; j<n; ++j)
//		{
//			scanf("%d", &arr1[i][j]);
//		}
//	}
//
//	for (int i = 0; i<m; ++i)
//	{
//		for (int j = 0; j<n; ++j)
//		{
//			scanf("%d", &arr1[i][j]);
//		}
//	}
//
//	int count = 0;
//	for (int i = 0; i<m; ++i)
//	{
//		for (int j = 0; j<n; ++j)
//		{
//			if (arr1[i][j] == arr2[i][j])
//			{
//				++count;
//			}
//		}
//	}
//
//	printf("%.2lf\n", (double)(count / m / n * 100));
//
//	return 0;
//}

//#define N 100
//
//int main()
//{
//	int n = 0;
//	while (~scanf("%d", &n))
//	{
//		//1.将2~n这些数字放进数组中存储
//		int arr[N];
//		arr[0] = 0;
//		for (int i = 1; i<n; ++i)
//		{
//			arr[i] = i + 1;
//		}
//		//2.遍历数组
//		for (int i = 1; i<n ; ++i)
//		{
//			//所有i后面能被i整除的数字都清0
//			if (arr[i] == 0)
//			{
//				continue;
//			}
//
//			for (int j = i + 1; j<n; ++j)
//			{
//				if (arr[j] % arr[i] == 0)//这里存在arr[i]为0的情况
//				{
//					arr[j] = 0;
//				}
//			}
//		}
//		//3.打印不为0的数
//		for (int i = 0; i<n; ++i)
//		{
//			if (arr[i] != 0)
//			{
//				printf("%d ", arr[i]);
//			}
//		}
//		printf("\n");
//	}
//	return 0;
//}

//#include<stdio.h>
//
//#define N 50
//
//void Insert_num(int* arr, int* n, int num)
//{
//	//在n之前插入num的情况
//	int i = 0;
//	int end = (*n);//end为n的位置
//
//	for (i = 0; i<(*n); ++i)
//	{
//		if (arr[i] >= num)//此时说明i这个位置就是需要插入的数据
//		{
//			while (end > i)
//			{
//				arr[end] = arr[end - 1];
//				--end;
//			}
//			break;
//		}
//	}
//	//不过是需要挪动数据，还是不需要挪动数据，最终都会使end停在需要插入的位置
//	arr[end] = num;
//	++(*n);
//}
//
//int main()
//{
//
//	//这里不适合使用变长数组
//	int n = 0;
//	scanf("%d", &n);
//
//	int arr[50];
//	for (int i = 0; i<n; ++i)
//	{
//		scanf("%d", &arr[i]);
//	}
//
//	int num = 0;
//	scanf("%d", &num);
//
//	Insert_num(arr, &n, num);//插入之后，n会变大
//
//	for (int i = 0; i<n; ++i)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	return 0;
//}
//
//int main()
//{
//	int x1, x2, y1, y2;
//	//1.输入两点坐标
//	scanf("%d %d", &x1, &x2);
//	scanf("%d %d", &y1, &y2);
//
//	double d = 0.0;
//
//	double ret = pow((double)(x1 - x2), 2) + pow((double)(y1 - y2), 2);//这里是加，勾股定理的公式a^2+b^2
//
//	d = sqrt(ret);
//
//	printf("%.2lf", d);
//
//	return 0;
//}

//int Numberof1(int n)
//{
//	unsigned int m = n;//弥补n为负数的情况
//	int count = 0;
//
//	while (m)
//	{
//		if (m % 2 == 1)
//		{
//			++count;
//		}
//		m /= 2;
//	}
//	return count;
//}

//int Numberof1(int n)
//{
//	int count = 0;
//	for (int i = 0; i < 32; ++i)
//	{
//		int ret = (n >> i) & 1;
//		if (ret)
//		{
//			++count;
//		}
//	}
//
//	return count;
//}

//int Numberof1(int n)
//{
//	int count = 0;
//	while (n)//0就是一个1都没有
//	{
//		++count;
//		n = n&(n - 1);
//	}
//
//	return count;
//}
//
//int main()
//{
//	int n = -1;
//	int ret = Numberof1(n);
//
//	printf("%d\n", ret);
//	return 0;
//}

//int main()
//{
//	int n = 0;
//
//	while (~scanf("%d", &n))
//	{
//		printf("%d\n", n);
//	}
//	return 0;
//}


//int main()
//{
//	char a = 127;
//
//	char c = a + 3;
//
//	printf("a = %d,c = %d\n", a, c);
//	return 0;
//}

//int main()
//{
//	unsigned char a = 255;
//
//	unsigned char c = a + 1;
//
//	printf("%d\n", c);
//	return 0;
//}

//unsigned int i;
//
//int main()
//{
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%u\n", i);
//	}
//	return 0;
//}

//#include<string.h>
//
//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i<1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	//-1
//	//-2
//	//-3
//	//…………
//	//往里面放
//	printf("%d", strlen(a));
//
//	return 0;
//}

//#include <stdio.h>
//
//unsigned char i = 0;
//
//int main()
//{
//	for (i = 0; i <= 255; i++)//根据周期性，会一直打印hello world
//	{
//		printf("hello world\n");
//	}
//	return 0;
//}


//int main()
//{
//	int i = -20;
//	unsigned int j = 10;
//	printf("%d\n", i + j);
//}

//10000000 00000000 00000000 00010100
//11111111 11111111 11111111 11101011
//11111111 11111111 11111111 11101100//-20的补码

//00000000 00000000 00000000 00001010

//11111111 11111111 11111111 11110110//10的补码
//10000000 00000000 00000000 00001001//补码相加
//10000000 00000000 00000000 00001010//转换原码  -- -10


//#include <stdio.h>
//int main()
//{
//	char a = 128;
//
//	printf("%u\n", a);
//
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	char a = -128;
//	printf("%u\n", a);
//	return 0;
//}

//#include<stdio.h>
//
//int main()
//{
//	int a = 1;
//
//	int b = -10;
//	return 0;
//}

//删除数组中指定的数字
//1.挪动数据
//2.遇到那个数字不打印--取巧


//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//数组的大小
//
//	int arr[6];//变长数组
//	for (int i = 0; i<n; ++i)
//	{
//		scanf("%d", &arr[i]);//输入数据
//	}
//
//	int num = 0;
//	scanf("%d", &num);//需要删除的元素
//
//	for (int i = 0; i<n; ++i)
//	{
//		if (arr[i] == num)
//		{
//			continue;
//		}
//		printf("%d ",arr[i]);
//	}
//	printf("\n");
//	return 0;
//}